"""
@version:python3
@author:大橘为重
@file:19-QSpinBox-功能测试.py
@time:2022/3/15 16:58
"""
# 0、导入需要的包和模块
from PyQt5.Qt import *
import sys

class SB(QSpinBox):
    def textFromValue(self, p_int):
        print(p_int)
        return "撩课" + str(p_int)


class Window(QWidget):
    def __init__(self):
        super().__init__()
        self.setWindowTitle("QSpinBox")
        self.resize(500, 500)
        self.setup_ui()
    def setup_ui(self): # 添加子控件以及子控件的配置操作
        # pass
        # sb = QSpinBox(self) # 默认数据范围0-99，不能输入非数字
        sb = SB(self) # 子类化
        self.sb =sb
        sb.resize(100,25)
        sb.move(100,100)
        # sb.setMaximum(180)
        # print(sb.maximum())
        # sb.setMinimum(18)
        # print(sb.minimum())
        # sb.setRange(18,180)
        # sb.setWrapping(True) # 设置数值循环：数值达到最大/最小时，跳转到最小/最大
        # btn = QPushButton(self)
        # btn.setText("数值循环")
        # btn.move(200,200)
        # btn.clicked.connect(lambda :sb.setWrapping(True))

        # sb.setSingleStep(2) # 设置步长为2
        # sb.setRange(1,12)
        # sb.setSuffix("月") # 设置后缀
        # sb.setRange(0,6)
        # sb.setPrefix("周")
        # sb.setSpecialValueText("周日") # 设置最小值对应的字符串

        # sb.setDisplayIntegerBase(10) # 显示进制数

        #
        # sb.setPrefix("liaoke")
        # sb.setValue(66) # 可以手动赋值，但是范围不能超过setRange()方法的限制
        # print(sb.value()) # 不能获得前缀后缀内容
        # print(sb.text())
        # print(sb.lineEdit().text()) # 上两种方法可以

        sb.valueChanged[str].connect(lambda val:print(type(val),val)) # 会传递两种信号，默认int，可根据[str]选择信号


# 1、创建一个应用程序对象
app = QApplication(sys.argv)

# 2、控件操作
# 创建控件、设置控件、事件和信号的处理
# 2.1 创建控件
window = Window()
# 2.2 设置控件


# 2.3 展示控件
window.show()

# 3、应用程序的执行，进入到消息循环
sys.exit(app.exec_())